package raft.service;

import raft.entity.AentryParam;
import raft.entity.AentryResult;
import raft.entity.RvoteParam;
import raft.entity.RvoteResult;

public interface Consensus {

    /**
     * 请求投票
     * <p>
     * 请求者任期小于当前任期 拒绝投票
     * 如果投票候选人的日志跟自己一样新就投票给他
     *
     * @param param
     * @return
     */
    RvoteResult requestVote(RvoteParam param) ;


    /**
     * 同步更新日志
     * 接收者实现：
     * <p>
     * 如果任期小于当前任期就返回false
     * 如果日志再日志索引和任期不匹配就返回false
     * 附加任何在已有日志中不存在的条目
     */

    AentryResult appendEntries(AentryParam param) ;


}
